package org.jeecg.lawcase.data;

import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.util.CompressedFileUtil;
import org.jeecg.lawcase.data.reader.DataImportApadter;
import org.jeecg.lawcase.data.reader.DataImportManager;
import org.jeecg.lawcase.data.reader.DataTemplate;
import org.jeecg.lawcase.data.wash.DataWash;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class DataManager {

    /**
     * 处理数据
     * @param files
     */
    public static void handleFile(List<String> files) throws IOException {
        // 读取文件
        List<DataTemplate> dataTemplates = readDatas(files);

        // 清洗和合并数据
        dataTemplates = DataWash.washData(dataTemplates);

        // 查找模板

    }

    /**
     * 读取文件
     * @param files
     * @return
     */
    private static List<DataTemplate> readDatas(List<String> files)throws IOException {
        List<DataTemplate> dataTemplates = new ArrayList<>();
        List<String> newFiles = getFiles(files);
        for(String filePath: newFiles){
            File file = new File(filePath);
            DataImportApadter dataImportApadter = DataImportManager.getServiceByFleName(file.getName());
            if(dataImportApadter == null){
                log.warn("未能找到文件读取适配器，忽略数据:{}", filePath);
                continue;
            }

            try(InputStream inputStream = new FileInputStream(filePath);){
                DataTemplate dataTemplate = dataImportApadter.importData(file.getName(), inputStream);
                dataTemplates.add(dataTemplate);
            }
        }
        return dataTemplates;
    }

    /**
     * 获取文件
     * @param files
     */
    private static List<String> getFiles(List<String> files) throws IOException {
        List<String> newFiles = new ArrayList<>();
        for(String filePath: files){
            File file = new File(filePath);
            boolean cpsFile = CompressedFileUtil.isCPSFile(file.getName());
            if(cpsFile){
                try(InputStream inputStream = new FileInputStream(file)){
                    // 解压文件至临时目录，并返回临时目录路径
                    String unPath = CompressedFileUtil.unFile(file.getName(), inputStream);
                    treeFile(unPath, newFiles);
                }
            } else {
                newFiles.add(file.getPath());
            }
        }
        return newFiles;
    }

    /**
     * 遍历目录文件
     * @param basePath
     * @param newFiles
     * @throws FileNotFoundException
     */
    private static void treeFile(String basePath, List<String> newFiles) {
        File[] files = new File(basePath).listFiles();
        if(files != null){
            return;
        }

        for(File file: files){
            if(file.isFile()){
                newFiles.add(file.getPath());
            } else {
                treeFile(file.getPath(), newFiles);
            }
        }
    }
}
